]> dgit.raspbian.org Git - gnome-shell.git/commit
st/scroll-view: Allocate the scrollbars 0-size instead of not painting them
authorJonas Dreßler <verdre@v0yd.nl>
Tue, 1 Aug 2023 18:35:28 +0000 (20:35 +0200)
committerJonas Dreßler <verdre@v0yd.nl>
Sat, 18 Nov 2023 11:22:51 +0000 (12:22 +0100)
commita59a992daaa001100b07ca10ae12ec1edba499d0
tree8b691c2b91f75d268a987c215bdc9c123392393f
parent8d7dc098b158be0a9f980fed97cad9031287e642
st/scroll-view: Allocate the scrollbars 0-size instead of not painting them

StScrollView applies the policy of whether to show or hide the scroll
bar,
and with the AUTOMATIC policy the scroll bar should be hidden as soon as
the
content of the scroll view is small enough to fit without scrolling.

Now we only know about the final size of the content when we're inside
st_scroll_view_allocate(), so that's where we can decide whether the
scroll
bar should be visible or not. Clutter really doesn't like calling
clutter_actor_show/hide() in the middle of an allocation cycle though,
so
what we do instead is saving the state into priv->vscrollbar_visible,
and
then just not painting the scroll bar based on that in a paint() vfunc
override.

This approach is not great for several reasons, it means we also have to
override pick() and finally it means the paint volume of the scroll bar
is
incorrect.

While the greatest solution to this would be to just hide/show the
scroll
bar inside the allocate() function as it is possible in gtk, we have an
established pattern for this kind of case too: We usually allocate a
0-sized
rect for the thing we want to hide, so let's do that instead.

A nice side effect is that we can conveniently drop another paint() and
pick() vfunc override.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2190>
src/st/st-scroll-view.c